package com.beiding.delaytask.fram;

import com.beiding.delaytask.entity.TimeTask;

import java.util.Date;

/**
 * 时间中控
 * 控制定时任务的准确触发
 *
 * @author 丁常磊
 * @date 2021/8/12 15:03
 */

public interface TimeControl {

    /**
     * 提交定时任务延时一定的秒数
     *
     * @param payload          延时任务负载
     * @param delaySeconds     延时的秒数
     * @param targetRoutingKey 目标路由键
     */
    void submit(String targetRoutingKey, Object payload, long delaySeconds);

    /**
     * 相对一定时长执行
     *
     * @param payload
     * @param time             相对时间
     * @param targetRoutingKey
     */
    void submit(String targetRoutingKey, Object payload, Time time);

    /**
     * 给定执行时间
     * @param targetRoutingKey
     * @param payload
     * @param date
     */
    void submit(String targetRoutingKey, Object payload, Date date);

    /**
     * 提交定时任务延时一定的秒数
     *
     * @param payload          延时任务负载
     * @param delaySeconds     延时的秒数
     * @param targetRoutingKey 目标路由键
     */
    void submit(String targetExchange,String targetRoutingKey, Object payload, long delaySeconds);


    /**
     * 相对一定时长执行
     *
     * @param payload
     * @param time             相对时间
     * @param targetRoutingKey
     */
    void submit(String targetExchange, String targetRoutingKey,Object payload, Time time);

    /**
     * 准点发生
     * @param targetExchange
     * @param targetRoutingKey
     * @param payload
     * @param date
     */
    void submit(String targetExchange, String targetRoutingKey,Object payload, Date date);


    /**
     * 由延时队列触发
     *
     * @param timeTask
     */
    void trigger(TimeTask timeTask);
}
